/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Logica;

import Proxy.Consulta.Bebe;
import Proxy.Consulta.Consulta;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Properties;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;

/**
 *Clase que realiza las operaciones sobre el xmlque posee los datos de las 
 * consultas
 * @author familia
 */
public class ConsultaXml {
    
    private Properties prop = new Properties();   
    private String ruta;

    /**
     * Constructor de la clase que inicializa el archivo properties para
     * leer la ruta del xml que contiene la informacion de las consultas
     */
    public ConsultaXml(){
        InputStream is = null;

        try {
          is=new FileInputStream("Configuracion.properties");
          prop.load(is);
          ruta = prop.getProperty("rutaXmlConsulta");
        } catch(IOException ioe) {}
    }
    /**
     * Metodo que almacena los datos de una consulta en el xml
     * @param consulta datos a almacenar
     * @return true si se realiza la insercion false si no
     */
    public boolean AgregarConsulta(Consulta consulta){
        boolean retorno = false;
        try {
            boolean vacio = false;
            SAXBuilder builder = new SAXBuilder();
            File archivo = new File(ruta);
                Document result;
                Element raiz;
                if(!archivo.exists()){
                    result = new Document(); 
                    archivo.createNewFile();
                    raiz = new Element("consultas");
                    vacio = true;
                }else{
                    
                    result = builder.build(new FileInputStream(archivo));  
                    raiz = result.getRootElement();
                }
            SimpleDateFormat sdf=new java.text.SimpleDateFormat("dd/MM/yyyy");
            
            consulta.setId(raiz.getChildren("consulta").size() + 1);
            Element nodo = new Element("consulta");
            nodo.addContent(new Element("id").setText(
                    String.valueOf(consulta.getId())));
            nodo.addContent(new Element("fechaConsulta").setText(consulta.getFechaConsulta().getDay() + "/" + 
                      consulta.getFechaConsulta().getMonth() + "/" + 
                      consulta.getFechaConsulta().getYear()));
            nodo.addContent(new Element("peso").setText(String.valueOf(
                    consulta.getPeso())));
            nodo.addContent(new Element("estatura").setText(String.valueOf(
                    consulta.getEstatura())));
            nodo.addContent(new Element("idbebe").setText(String.valueOf(
                    consulta.getPaciente().getId())));            
            nodo.addContent(new Element("circunferencia").setText(String.valueOf(
                    consulta.getCircuferencia())));
            
            raiz.addContent(nodo);
                if(vacio)
                    result.addContent(raiz);
            XMLOutputter xml_out=new XMLOutputter();
            FileOutputStream file_os=new FileOutputStream(ruta);
            xml_out.output(result,file_os);
            file_os.close();
            retorno = true;
            
        } catch (Exception e) {
        }
        return retorno;
    }
    
    /**
     * Metodo que obtiene todas las consultas de un bebe
     * @param bebe
     * @return 
     */
    public List<Consulta> ObtenerConsulta(Bebe bebe){
        List<Consulta> retorno = new ArrayList<Consulta>();
        Document result;
        try {
             GregorianCalendar gcal = new GregorianCalendar();
            SimpleDateFormat sdf=new java.text.SimpleDateFormat("dd/MM/yyyy");
            SAXBuilder builder = new SAXBuilder();
            result = builder.build(new FileInputStream(ruta));  
            Element raiz = result.getRootElement(); 
            List<Element> hijosRaiz = raiz.getChildren("consulta"); 
            for (Element elemento : hijosRaiz) {
                if(elemento.getChild("idbebe").getValue().equalsIgnoreCase(
                        bebe.getId())){
                    gcal = new GregorianCalendar();
            XMLGregorianCalendar fec;
            fec = DatatypeFactory.newInstance().newXMLGregorianCalendar(gcal);
                    String[] fec_part = elemento.getChild("fechaConsulta").getValue().split("/");
                    fec.setYear(Integer.parseInt(fec_part[2]));
                    fec.setMonth(Integer.parseInt(fec_part[1]));
                    fec.setDay(Integer.parseInt(fec_part[0]));
                    Consulta nuevo = new Consulta();
                    nuevo.setCircuferencia(Integer.parseInt(
                            elemento.getChild("circunferencia").getValue()));
                    nuevo.setEstatura(Integer.parseInt(
                            elemento.getChild("estatura").getValue()));
                    nuevo.setFechaConsulta(fec);
                    nuevo.setPeso(Integer.parseInt(
                            elemento.getChild("peso").getValue()));
                    retorno.add(nuevo);
                }
            }

        } catch (Exception e) {  
            System.out.println(e.getMessage());
        }
        return retorno;
    }
}
